home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d26 / qmtek601.arc / APIBRO.TEC < prev    next >
Text File  |  1991-05-23  |  48KB  |  1,234 lines

  1. ID:AB  DESQview API General Information
  2. Quarterdeck Technical Note #187
  3. By Jim Susoy
  4.  
  5. In the Quarterdeck view of the world there are three kinds of DOS
  6. programs.
  7.  
  8. There's the DESQview-oblivious program, such as 1-2-3 or
  9. AutoCAD,written
  10. with no consideration of DESQview, but still compatible with
  11. DESQview.
  12.  
  13. There's the DESQview-aware program. It has been modified slightly
  14. so that
  15. it runs efficiently in DESQview and concurrently with other
  16. programs.
  17. Paradox, DBASE III, DBASE IV, FoxPro and WordPerfect are
  18. DESQview-aware.
  19.  
  20. Then there's the DESQview-specific program, like the DESQview
  21. Datebook.
  22. It's written to take advantage of DESQview's power. If you look
  23. closely,
  24. you'll discover DESQview behind both the ICL North America and
  25. IBM/Tridata
  26. point of sale systems, US Data's factory control systems, TRW's
  27. title
  28. insurance system, Moody's Investor's Services' bond rating system,
  29. FNN's NewsReal and Novell's Remote Access Server, to name only a
  30. few.
  31.  
  32. Hidden deep inside DESQview 2 is a powerful API (Application
  33. Program
  34. Interface) that lets programs control and interact with DESQview
  35. and with
  36. other programs running in DESQview.  For MIS and DP departments
  37. building
  38. workstation solutions, the DESQview API provides enormous benefits.
  39. For it
  40. brings OS/2 capabilities (and even OS/2 look and feel if desired)
  41. to DOS.
  42. Using the DESQview API, a program can use all the DESQview menu
  43. functions
  44. available to the user as well as the power-packed capabilities
  45. built
  46. into DESQview multitasking, windowing, intertask communications,
  47. mailboxes,
  48. shared programs, memory management, mousing, data transfer,
  49. menu-building,
  50. and help.
  51.  
  52. So DOS programs can now act alone or together. Either within a
  53. window or
  54. hidden behind one, they can do chores in silence or in chorus, all
  55. the while
  56. utilizing the full power of DESQview, all the while bringing you
  57. treasures
  58. you only dreamed 'til now were possible.
  59.  
  60. A program taking advantage of the DESQview  API can display
  61. information in
  62. windows and control the color, dimensions, position and ordering of
  63. windows
  64. on the screen.  It can disable, limit or enhance the standard
  65. DESQview user
  66. interface.  Which means that you can have DESQview-like menus in
  67. your
  68. program.  Or menu bars and pull-down menus. Or IBM SAA-like menus.
  69. It can let
  70. DESQview handle all keyboard and mouse input to menus and forms yet
  71. still
  72. process keyboard and mouse input directly when necessary. It can
  73. schedule
  74. processing after a certain time interval or at a certain time. It
  75. can spawn
  76. subtasks for performing background operations such as printing,
  77. recalculating, and communicating. It can communicate between the
  78. various
  79. tasks in the system.
  80.  
  81.  
  82. Multitasking
  83.  
  84. DESQview supports true multitasking of existing DOS programs in
  85. addition to
  86. programs written specifically for DESQview. So a user can run
  87. multiple
  88. programs (Lotus 1-2-3, DBASE IV and others) and DESQview-specific
  89. programs
  90. (DESQview Datebook, Calculator, your own program) concurrently. So
  91. a user can
  92. switch to whichever program needs input and switch away while the
  93. program
  94. recalculates or sorts in background.
  95.  
  96. Under DESQview, each program runs in its own "virtual machine",
  97. thinking it
  98. has exclusive access to DOS, the keyboard, etc. DESQview calls
  99. these virtual
  100. machines "processes". DESQview calls the portion of a process that
  101. keeps
  102. track of which instruction to execute next and what the register
  103. contents
  104. are a "task" (or "thread"). Every program running under DESQview
  105. consists,
  106. initially, of a single process running a single task.
  107.  
  108. DESQview-specific programs may create additional tasks within their
  109. own
  110. processes and additional processes. Additional tasks allow a
  111. portion of your
  112. program, the part that controls the printer for example, to be run
  113. in
  114. background. Additional processes allow whole new programs to be
  115. loaded and
  116. run concurrently.
  117.  
  118.  
  119. Presentation Management
  120.  
  121. Because DESQview lets you run more than one program at a time,
  122. DESQview
  123. provides a way to view more than one program at a time on the
  124. screen.
  125. DESQview does this by mapping each program into its own "window"
  126. and by
  127. managing the display of multiple windows on the screen. To
  128. DESQview, windows
  129. are rectangular areas of displayable information. They may be
  130. moved, resized,
  131. colored, and reordered by either the user or by your program.
  132. Everything that
  133. is displayed on the screen under DESQview is displayed in a window.
  134.  
  135. Multiple windows are not only useful for displaying several
  136. programs
  137. simultaneously, but may also be used within a single program to
  138. display
  139. menus, help screens, error messages. DESQview provides facilities
  140. for storing
  141. complete descriptions of such windows, (known by DESQview as
  142. "panels"), on
  143. disk or in your program and displaying them with a single call to
  144. the API.
  145. These panels may be as simple as one-line error messages or as
  146. complex as
  147. data entry forms with multiple-choice and data entry fields.
  148.  
  149. Once a panel has been displayed, your program can ask DESQview's
  150. "field
  151. manager" to process all user input to the panel including mousing
  152. and data
  153. entry editing. The field manager returns the results to your
  154. program in a
  155. simple, field-oriented format, independent of the appearance of the
  156. panel.
  157.  
  158. The use of panels and the field manager not only simplifies the job
  159. of
  160. programming an application, but gives a consistency to the user
  161. interface
  162. that makes the learning of new applications easier.
  163. Intertask Communications
  164.  
  165. So that DESQview-specific programs can rapidly exchange
  166. information, DESQview
  167. provides a wide range of intertask communications facilities. These
  168. facilities allow several concurrently running tasks to exchange
  169. information
  170. or signals, to lock access to common resources, to share common
  171. code and
  172. data, and to interrupt each other to handle critical events. These
  173. tasks can
  174. be in either the same or in different processes.
  175.  
  176. Intertask communication is the key to building complex applications
  177. in a
  178. multitasking environment. Let's say, for example, you are building
  179. a point of
  180. sale system, that handles a dozen cash registers for a department
  181. store.
  182. Using DESQview you could break your application up into fourteen
  183. tasks; one
  184. for each of the cash registers, one to handle access to the pricing
  185. data-base
  186. and one to track sales and generate management reports. The cash
  187. register
  188. tasks would process keystrokes from the clerk until an item price
  189. is needed.
  190. They would then send a message to the database task requesting the
  191. price. The
  192. database task would log the sale and return the price to the sender
  193. of the
  194. request.  Meanwhile, the store manager could interact with the
  195. reporting task
  196. to monitor sales, clerk performance, etc.
  197.  
  198.  
  199. Data Transfer
  200.  
  201. DESQview supports two types of user-initiated data transfer. The
  202. first,
  203. called Mark &Transfer, lets a user mark text in any window and
  204. transfer
  205. that text to any other application. The application receiving the
  206. data can be DESQview-oblivious, seeing the data as normal keyboard
  207. input.
  208.  
  209. More sophisticated transfers are possible between DESQview-specific
  210. applications that support the DESQview Scissors command. When the
  211. user marks data in such an application, DESQview notifies the
  212. application
  213. that data has been requested and lets the application determine
  214. exactly
  215. what data to supply. The application may supply anything including
  216. text, formulas, or even graphics images. When the user instructs
  217. DESQview
  218. to Paste the data into another application, that application is
  219. also
  220. notified so that the data can be handled appropriately.
  221.  
  222. The applications involved in a Scissors transfer can even use
  223. DESQview's 
  224. intertask communication facilities to setup a "hot-link" between
  225. them-
  226. selves so that subsequent changes to the data are automatically
  227. reflected 
  228. in both applications.
  229.  
  230.  
  231. Memory Management
  232.  
  233. Programs running under DOS are typically given all of a PC's memory
  234.  
  235. to do with as they please. In a multitasking environment, memory
  236. must 
  237. be managed so that more than one program can be loaded at a time
  238. and 
  239. so that no single program is given more memory than it needs.
  240. DESQview 
  241. provides this management in a way that adapts to the type of memory
  242.  
  243. hardware available on your PC.
  244.  
  245. If your PC has 640K of conventional memory, DESQview is able to
  246. multitask 
  247. as many programs as will fit in memory at the same time. Additional
  248.  
  249. programs can be loaded but will cause the least recently used
  250. programs 
  251. to be suspended and swapped to disk to make room in memory for the 
  252. new ones. 
  253.  
  254. If your PC is a 286-based system with extended memory, DESQview can
  255.  
  256. still only multitask the programs that fit in 640K. Additional
  257. programs 
  258. open can be swapped either to RAM disk, as well as to the user's
  259. local 
  260. disk or network disk. DESQview is also capable of running 60K of
  261. itself 
  262. in extended memory<197>thus reducing its DOS conventional memory
  263. overhead.
  264. If you have EMS 3.2 (Lotus-Intel-Microsoft Expanded Memory),
  265. DESQview 
  266. will swap programs to expanded memory instead of to disk. This is 
  267. so much faster than swapping to disk that the swap time is almost 
  268. not noticeable.
  269.  
  270.  
  271. If your PC has EMS 4.0 or EEMS (AST-Quadram-Ashton Tate Enhanced
  272. Expanded
  273. Memory) or a 386-based PC with an EMS 4.0 driver, DESQview can
  274. actually
  275. multitask as many programs as will fit in conventional and expanded
  276. memory.
  277. This can be as high as 32-megabytes worth of programs. DESQview can
  278. also run
  279. a large part of itself in expanded memory, giving a much larger
  280. maximum
  281. program size.
  282.  
  283. Furthermore, DESQview can actually run both 286 or 386 DOS Extended
  284.  
  285. programs simultaneously with your other DOS programs. DOS Extended 
  286. programs are programs, such as 1-2-3 Release 3, IBM Interleaf,
  287. AutoCAD 
  288. 386, Paradox 386, which have been written to take advantage of
  289. either 
  290. the 16-bit protected mode of the 80286 processor or the 32-bit
  291. protected 
  292. mode of the 80386 processor. It is important to note that for
  293. DESQview 
  294. to be able to run DOS Extended programs, the DOS Extender must
  295. conform 
  296. to the PharLap/Quarterdeck VCPI (Virtual Control Program Interface)
  297.  
  298. specification which specifies how protected mode programs and 80386
  299.  
  300. control programs can work together. With most DOS Extenders, you
  301. also 
  302. get the added benefit of virtual memory support automatically built
  303.  
  304. into the program a significant benefit if your users have limited 
  305. memory.
  306.  
  307.  
  308. Customization
  309.  
  310. Although DESQview is best known for its ability to run
  311. off-the-shelf 
  312. software concurrently, DESQview is an ideal platform for developing
  313.  
  314. customized vertical market applications and workstations. 
  315.  
  316. DESQview's intertask communications and shared program and data
  317. capabilities,
  318. coupled with its support of expanded memory, give developers
  319. efficient 
  320. and cost effective techniques for developing large programs that
  321. can 
  322. still run on DOS and thus on the large installed base of DOS PCs.
  323.  
  324. In addition to providing multitasking and windowing services, 
  325. DESQview can be custom-ized to provide the user interface
  326. appropriate 
  327. to a particular application.  This customization can take the form
  328. of
  329. restricting access to certain DESQview menus, taking special action
  330. when
  331. certain menu items are selected, or, in the extreme, disabling all
  332. access to
  333. DESQview menus and providing the entire user interface as part of
  334. the
  335. application. 
  336.  
  337. In this latter case, the only part of DESQview that the user sees 
  338. is a copyright screen during start-up. DESQview also includes a
  339. keystroke
  340. macro capability enabling you to create built-in macros for each
  341. application
  342. running as well as global macros which combine actions from several
  343. programs.
  344.  
  345.  
  346. Portability
  347.  
  348. DESQview with its entire API runs on 8088, 8086, 80286, 80386 and 
  349. 80486i PCs as well as the IBM Personal System/2s with monochrome, 
  350. CGA, EGA, VGA or Hercules display adapters. Additionally, Wyse 700 
  351. and Micro Display System Genius adapters are available from
  352. Quarterdeck. 
  353. This means that an application that you write to be
  354. DESQview-specific 
  355. can run on any PC from a laptop dual-floppy PC to the very latest 
  356. 486-based PC. It can even run over a network on a diskless PC. 
  357. Thus, the market for your DESQview-specific application extends to 
  358. the entire base of existing and future DOS PCs. 
  359.  
  360.  
  361. API Details
  362.  
  363. In order for you to get a feel for the power built-in to each and 
  364. every DESQview, we've included a short description about each API 
  365. command. 
  366.  
  367. The DESQview API is an object-oriented interface. The data
  368. structures 
  369. DESQview uses to represent windows, mailboxes, etc. are called
  370. "objects". 
  371. A call to the API involves "sending a message" to an object,
  372. indicating 
  373. which of several operations you want performed on that data
  374. structure. 
  375. This is referred to as the "send interface." Almost the entire API 
  376. consists of sending one of 25 messages to one of 7 different object
  377.  
  378. types.
  379. The DESQview API also has a non-object-oriented interface called
  380. the 
  381. "direct call interface". This is the small subset of API functions 
  382. that are not, by nature, object oriented or that are convenient
  383. alternatives 
  384. to the send interface.
  385. The DESQview API has a concise way of encoding a complete
  386. description 
  387. of a window so that a single call to the API can create the window,
  388.  
  389. fill it with the desired information, size and position it on the 
  390. display, and define fields that interact with the user. All this is
  391.  
  392. done using "Window Streams".
  393.  
  394. So that you can interrogate a window for its current 
  395. contents, position, etc., the DESQview 2 API also has "Query
  396. Streams." 
  397. In fact, any window parameter that can be set by a Window Stream
  398. can 
  399. be read by a Query Stream.
  400.  
  401. DESQview calls the portion of itself that interfaces with the user 
  402. the "Window Manager." Each time a user presses the DESQ key
  403. (normally 
  404. the Alt key) and makes a menu selection, it is the Window Manager 
  405. that opens, switches, rearranges and closes windows, transfers
  406. data, 
  407. displays help, or quits DESQview. In order for an application to
  408. have 
  409. the same power as the user, the DESQview API has "Manager Streams."
  410.  
  411. Manager Streams enable an application to interact with the Window 
  412. Manager. 
  413.  
  414. Using Manager Streams an application can, for example, ask the
  415. Window 
  416. Manager to make one of its windows the topmost window in the
  417. system, 
  418. disallow any resizing of  the window by the user, and even notify 
  419. the application if the user tries to close the window. Using
  420. Manager 
  421. Streams an application can disallow use of the DESQview menu and
  422. DESQview 
  423. submenus.
  424.  
  425. But, there's still even more to the DESQview API. DESQview provides
  426.  
  427. a comprehensive set of functions for simplifying the job of
  428. interfacing 
  429. with the user. Instead of dealing with user input a single
  430. character 
  431. at a time, your application can present entire menus, dialogue
  432. boxes, 
  433. help screens to DESQview and get back the resulting user input.
  434. Common 
  435. functions such as cursor control, insertion and deletion of
  436. characters, 
  437. tracking the mouse, and selection from option lists are performed 
  438. by DESQview. DESQview performs these functions under control of a 
  439. data structure called the "Field Table.."
  440. Information about a window's size, position, contents and Field
  441. Table 
  442. can be combined together into "Panels." Panels can be stored on
  443. disk 
  444. or in memory for later display. Panels can be constructed manually 
  445. or via the DESQview API Panel Design Tool.
  446.  
  447.  
  448. DESQview 2 API Commands:
  449.  
  450. Send Interface Commands
  451.  
  452. WINDOW Objects
  453.  
  454. ADDTO     write characters & attributes to a window
  455. AT        position the logical cursor
  456. CONNECT   connect one window to another window
  457. EOF       return TRUE if cursor is past end window
  458. ERASE     clear a window
  459. FREE      close and free a window or a task
  460. HANDLE    return handle of current task's window
  461. LEN       return # characters/line in logical window
  462. NEW       create a new window or task
  463. OPEN      fill a window with a given character
  464. READ      read the next logical line from a window
  465. READN     read the next n characters/attributes
  466. REDRAW    redraw a window
  467. SIZEOF    return total # characters/logical window
  468. SUBFROM   write attributes to a window
  469. WRITE     write characters and/or command streams
  470.  
  471. KEYBOARD Objects
  472.  
  473. ADDTO     set individual keyboard control flags
  474. CLOSE     close a keyboard object
  475. ERASE     discard all input queued to keyboard
  476. FREE      free a keyboard object
  477. GETFLAGS  get keyboard control flags
  478. GETPRI    get objectq priority level of keyboard
  479. HANDLE    return handle of task's default keyboard
  480. NEW       create a new keyboard object
  481. OPEN      attach a keyboard to a window
  482. READ      get the next input from the keyboard
  483. SETESC    intercept keystrokes to input fields
  484. SETFLAGS  set/clear all keyboard control flags
  485. SETPRI    set objectq priority level of keyboard
  486. SIZEOF    return # of input buffers queued
  487. STATUS    get the scan code for the last key read
  488. SUBFROM   clear individual keyboard control flags
  489. WRITE     add input buffer to keyboard queue
  490.  
  491. MAILBOX Objects
  492.  
  493. ADDR      return sender of the last message READ
  494. ADDTO     send a message and status by value
  495. CLOSE     close a mailbox
  496. ERASE     discard all queued messages
  497. FREE      free a mailbox
  498. GETFLAGS  get mailbox control flags
  499. GETPRI    get objectq priority level of mailbox
  500. HANDLE    return handle of task's default mailbox
  501. LOCK      request exclusive access to a resource
  502. NEW       create a new mailbox
  503. OPEN      open a mailbox for input
  504. READ      get the next message from the queue
  505. SETFLAGS  set/clear all mailbox control flags
  506. SETNAME   assign a name to a mailbox
  507. SETPRI    set objectq priority level of mailbox
  508. SIZEOF    return the # of messages in the queue
  509. STATUS    return status of the last message READ
  510. SUBFROM   send a message & status by reference
  511. WRITE     send a message by value with status=0
  512.  
  513. OBJECTQ Objects
  514.  
  515. CLOSE     close an objectq
  516. ERASE     remove all objects from the queue
  517. HANDLE    return the handle of a task's objectq
  518. OPEN      open the objectq
  519. READ      wait for input from any open object
  520. SIZEOF    return the number of objects queued
  521. STATUS    return whether or not objectq is open
  522. SUBFROM   remove specific object from queue
  523. WRITE     add an object to the objectq
  524.  
  525. PANEL Objects
  526.  
  527. APPLY     display a particular panel
  528. CLOSE     close a panel object
  529. DIR       return a pointer to the panel directory
  530. FREE      free a panel object
  531. NEW       create a panel object
  532. OPEN      associate panel object with a panel file
  533. SIZEOF    return the # of panels in a panel file
  534. STATUS    verify success of an OPEN or APPLY
  535.  
  536. POINTER Objects
  537.  
  538. ADDTO     set pointer control flags
  539. CLOSE     stop taking pointer input
  540. ERASE     discard all pointer messages
  541. FREE      free a pointer object
  542. GETFLAGS  get pointer control flags
  543. GETPRI    get objectq priority level of pointer
  544. GETSCALE  return the current scaling factors
  545. NEW       create a new pointer object
  546. OPEN      start taking pointer input for window
  547. READ      wait for the next pointer message
  548. SETFLAGS  replace pointer control flags
  549. SETPRI    set objectq priority level of pointer
  550. SETSCALE  set the current scaling factors
  551. SIZEOF    return the number of messages queued
  552. STATUS    return the status of the last message
  553. SUBFROM   reset pointer control flags
  554. WRITE     move the pointer to a specified position
  555.  
  556. TIMER Objects
  557.  
  558. ADDTO     start a timer for a specified interval
  559. CLOSE     close a timer object
  560. ERASE     cancel the current timer interval
  561. FREE      free a timer object
  562. GETPRI    get objectq priority level of timer
  563. LEN       return time remaining before expiration
  564. NEW       create a new timer object
  565. OPEN      open a timer object
  566. READ      wait for the current timer to expire
  567. SETPRI    set objectq priority level of timer
  568. SIZEOF    return elapsed time since timer started
  569. STATUS    return the status of the timer object
  570. WRITE     start a timer to end at a specified time
  571.  
  572. Direct Call Interface Commands
  573.  
  574. APILEVEL  define minimum API level required
  575. APPNUM    get the current application's number
  576. ASSERTMAP get current mapping context & set new
  577. BEGINC    begin critical region
  578. CSTYLE    use C language style control codes
  579. DBGPOKE   poke debug information onto display
  580. DISPEROR  display an error message window
  581. DVPRESENT determine if DESQview is present
  582. ENDC      end critical region
  583. FINDMAIL  find a mailbox by name
  584. FREEBIT   undefine second-level interrupt handler
  585. GETBIT    define a second-level interrupt handler
  586. GETBUF    get address of a Logical Window Buffer
  587. GETCRIT   get critical region nesting level
  588. GETERROR  get error handling level of current task
  589. GETMEM    allocate buffer from System Memory
  590. ISOBJ     determine if a handle is valid
  591. JUSTIFY   turn off/on automatic justification
  592. KMOUSE    control the keyboard mouse
  593. LOCATE    find window at given screen location
  594. NEWPROC   start a new process
  595. OBJTYPE   determine object type of a given handle
  596. OSTACK    switch to task's internal stack
  597. PAUSE     relinquish control to other tasks
  598. PGMINT    interrupt another task
  599. POSTTASK  awaken task by posting its Objectq
  600. POSWIN    position a window on the display
  601. PRINTC    display a character in a window
  602. PUSHKEY   push key into keyboard input stream
  603. PUTMEM    free a buffer allocated by GETMEM
  604. SETBIT    schedule a second-level interrupt handler
  605. SETERROR  set error handling level of current task
  606. SHADOW    get window buffer and start shadowing
  607. SOUND     make a sound
  608. START     start a task that was previously stopped
  609. STOP      stop a task until START is called
  610. UPDATE    update a portion of a window
  611. USTACK    switch off task's internal stack
  612.  
  613.  
  614. Window Stream & Query Stream Commands
  615.  
  616. 00 to 9F  print strings (attrib,char,blanks) to window
  617.  
  618. A0 to CF  change size/ position of a window
  619.  
  620. D0 to DF  set options for appearance of window:
  621. frames,color,show/hide
  622. window,            display of control characters
  623.  
  624. E0 to EF  perform immediate actions:clearing,scrolling recoloring,
  625.           redrawing window;create  new windows & repeat command
  626. sequences
  627.  
  628. F0 to FF  define, read, write fields within window.
  629.  
  630.  
  631. Manager Streams
  632.  
  633. 00 to 3F  Allows specific DESQview commands:
  634.           move & resize window, scroll data, hide
  635.           rearrange program, suspend application, 
  636.           display DESQview menu
  637.  
  638. 40 to 71  notify application on specific DV commands.
  639.  
  640. 84 to 8B  specify environment of window: suspend
  641.           application when it is in background, set
  642.           application's asynchronous notification.
  643.  
  644. AE to BF  enable/disable DESQview extensions.
  645.  
  646. C0 to FF  reorder, hide, unhide, suspend resume
  647.           applications.
  648.  
  649. C, Pascal, BASIC, Clipper & dBASE
  650. Listed below are API Interfaces available with each DESQview API
  651. library.
  652.  
  653.  
  654. C - C 
  655. P - Pascal
  656. B - Basic
  657. R - Clipper
  658. D - dBase
  659.  
  660.       General Functions
  661. CPBRD
  662. -----
  663. YYYYY api_beginc       begin critical region 
  664. YYYYY api_cancel       cancel current Window Mgr operation 
  665. YYYY  api_commonmem    get status of Common Memory 
  666. YYYY  api_convenmem    get status of Conventional Memory 
  667.    Y  api_curdrive     get the current default drive 
  668.    Y  api_dec          convert hex string to unsigned decimal # 
  669. YY Y  api_dvpresent    determine if DESQview is present 
  670. YYYYY api_endc         end critical region
  671. YYYY  api_enterc       begin critical region w/o waiting for DOS 
  672. YYYYY api_exit         exit API interface 
  673. YYYY  api_expandmem    get status of Expanded Memory 
  674. YY Y  api_freebit      disconnect 2nd level interrupt handler 
  675. YY Y  api_getbit       define 2nd level interrupt handler 
  676. YYYYY api_getcommon    get Common Memory buffer 
  677. YYYYY api_getcrit      get critical region nesting level 
  678. YYYYY api_getmem       get System Memory buffer 
  679.    Y  api_hex          convert decimal # to hexadecimal string 
  680.    Y  api_hexaddr      convert addr to string in seg:off hex form 
  681. YYYYY api_init         initialize API interface & return version of
  682. DESQview 
  683.   Y   api_interactive  determine if in BASIC interactive
  684. environment 
  685. YYYYY api_isobj        determine if a given handle is valid 
  686.    Y  api_isset        determine if given bit is set within a
  687. specified byte 
  688. YYYYY api_justify      enable/disable automatic justification of
  689. task window 
  690. YYYYY api_kmouse       turn keyboard mouse on and off 
  691. YYYYY api_level        define API revision level that application
  692. requires 
  693. YYYYY api_objtype      determine object type of a given handle 
  694. YYYYY api_pause        give other tasks a chance to run 
  695. YYYYY api_poke         display debug info on bottom line of screen 
  696. YYYY  api_processmem   get status of app's Process Memory 
  697. YYYYY api_pushkey      push key into input stream 
  698. YYYY  api_putcommon    return Common Memory buffer 
  699. YYYY  api_putkey       put key into an application's input stream 
  700. YYYY  api_putmem       return System Memory buffer 
  701.    Y  api_read         read from DV-owned memory buffer 
  702. YY Y  api_setbit       schedule a 2nd level interrupt handler 
  703. YY Y  api_shadow       get task's logical window buffer & start
  704. shadowing 
  705. YYYYY api_sound        make a sound 
  706. YY Y  api_update       redraw portion of a task's logical window 
  707.    Y  api_write        write to DESQview-owned memory buffer
  708.  
  709.  
  710.       Application Management Functions
  711. CPBRD
  712. -----
  713. YYYYY app_foreonly     indicate whether app can run in background 
  714. YYYYY app_free         free an application and its window 
  715. YYYYY app_goback       force an application into background 
  716. YYYYY app_gofore       force an application into foreground 
  717. YYYYY app_hide         hide all windows of an application 
  718. YYYY  app_new          start a new app in the current process 
  719. YYYYY app_number       get the current app's Switch number  
  720.    Y  app_run          execute DOS command in new process 
  721. YYYYY app_show         display all windows of an application 
  722. YYYYY app_start        start a new application in a new process 
  723. YYYYY app_suspend      suspend and hide all tasks in an app
  724.       
  725.       
  726.       Field Management Functions 
  727. CPBRD
  728. -----
  729. YYYYY fld_altmode      set Alternate Field Processing mode 
  730.    Y  fld_atget        input data at specified field position 
  731.    Y  fld_atprompt     paint menu prompts & define msg at fld
  732.    Y  fld_atsay        display data at specified field 
  733. YYYYY fld_attr         fill a field with a given attribute 
  734. YYYYY fld_char         fill a field with a given character 
  735. YYYYY fld_clear        clear a field 
  736. YYYYY fld_cursor       move cursor to a field 
  737. YYYYY fld_entry        change field table entry 
  738. YYYYY fld_header       change field table header 
  739.  YYY  fld_lentry       load field table entry of field table window
  740. stream 
  741.  YYY  fld_lheader      load field table header of field table
  742. window stream 
  743. YYYYY fld_marker       define selected-field marker character 
  744. YYYYY fld_point        move pointer to a given position in a field 
  745. YYYYY fld_protattr     set Protected Attrib field processing mode 
  746.  
  747. YYYYY fld_reset        reset selected and modified bits 
  748. YYYYY fld_scroll       scroll a field 
  749.  YYY  fld_stream       allocate string space for field table window
  750. stream 
  751. YYYYY fld_type         change the type of a field 
  752. YYYYY fld_write        write a string into a field
  753.       
  754.       
  755.       Keyboard Management Functions 
  756. CPBRD
  757. -----
  758.    Y  key_accept       enter a string into a memory variable 
  759. YYYYY key_addto        set keyboard control flags 
  760.    Y  key_clear        empty keyboard type ahead buffer 
  761.    Y  key_clkey        convert DV key code to Clipper key code 
  762. YYYYY key_close        disconnect keyboard from its window 
  763.    Y  key_dvkey        convert Clipper key code to DV key code 
  764. YYYYY key_erase        discard pending keyboard input 
  765. YYYYY key_free         free a keyboard object 
  766. YYYYY key_getc         wait for next key (keystroke mode) 
  767. YYYYY key_getflags     get keyboard control flags 
  768. YYYYY key_getpri       get priority level of keyboard in objectq 
  769.   YY  key_inkey        read a character from keyboard 
  770.    Y  key_input        enter an expression into a memory variable 
  771.    Y  key_keyboard     stuff keyboard buffer with a string 
  772.    Y  key_lastkey      determine last key fetched from keybd 
  773. YYYYY key_me           get current task's keyboard handle 
  774.    Y  key_nextkey      read the next key from keyboard 
  775. YYYYY key_new          create a new keyboard object 
  776. YYYYY key_of           get handle of a given task's keyboard 
  777. YYYYY key_open         attach keyboard to a given window 
  778. YYYY  key_owner        get owner of a given keyboard 
  779. YYYYY key_read         read input from keyboard 
  780.    Y  key_readinsert   return the current insert mode setting 
  781.    Y  key_readlast     read DV key code in key_lastkey buffer 
  782.    Y  key_setcursor    determine if hardware cursor displayed 
  783. YYYY  key_setesc       define function to filter keys in fld mode 
  784. YYYYY key_setflags     replace keyboard control flags 
  785. YYYYY key_setpri       set priority level of kbd in task's objectq 
  786. YYYYY key_sizeof       get # keyboard messages pending 
  787. YYYYY key_status       get status of last keyboard message 
  788. YYYYY key_subfrom      clear keyboard control flags 
  789.    Y  key_wait         suspend task until a key is pressed 
  790. YYYYY key_write        write string to keyboard 
  791.    Y  key_writelast    write DV key code into 
  792.       
  793.       
  794.       Mailbox Management Functions
  795. CPBRD
  796. -----
  797. YYYYY mal_addr         return sender of last message 
  798. YYYYY mal_addto        send a message by value with given status 
  799. YYYYY mal_close        close a mailbox 
  800. YYYYY mal_erase        erase all pending messages 
  801. YYYYY mal_find         find a mailbox by name 
  802. YYYYY mal_free         free a mailbox object 
  803. YYYY  mal_getflags     get mailbox control flags 
  804. YYYY  mal_getpri       get priority level of mailbox in objectq 
  805. YYYYY mal_lock         lock access to a resource 
  806. YYYYY mal_me           get handle of current task's mailbox 
  807. YYYYY mal_name         assign a global name to a mailbox 
  808. YYYYY mal_new          create a new mailbox 
  809. YYYYY mal_of           get handle of a given task's mailbox 
  810. YYYYY mal_open         open a mailbox 
  811. YYYY  mal_ownerget     owner of a given mailbox 
  812. YYYYY mal_read         wait for next message 
  813. YYYY  mal_setflags     replace mailbox control flags 
  814. YYYY  mal_setpriset    priority level of mailbox in task's objectq 
  815. YYYYY mal_sizeof       get # messages pending 
  816. YYYYY mal_status       get status of last message received 
  817. YYYY  mal_subfrom      send msg by reference w given status 
  818. YYYYY mal_unlock       unlock access to a resource 
  819. YYYYY mal_write        send a message by value with status zero
  820.       
  821.       
  822.       Objectq Management Functions
  823. CPBRD
  824. -----
  825. YYYYY obq_close        close the task's objectq 
  826. YYYYY obq_erase        erase contents of the task's objectq 
  827. YYYYY obq_open         open the task's objectq 
  828. YYYYY obq_read         wait for any object to have input 
  829. YYYYY obq_sizeof       get # of objectq entries pending 
  830. YYYYY obq_status       determine if the task's objectq is open 
  831. YYYYY obq_subfrom      remove copies of object handle from task's
  832. objectq 
  833. YYYYY obq_write        add an object handle to task's objectq
  834.       
  835.       
  836.       Panel Management Functions 
  837. CPBRD
  838. -----
  839. YYYYY pan_apply        display a named panel & prepare for input 
  840. YYYYY pan_close        close a panel file 
  841. YYYY  pan_dir          get list of panels in the panel file 
  842. YYYYY pan_free         free a panel object 
  843. YYYYY pan_new          create a panel object 
  844. YYYYY pan_open         open a panel file 
  845. YYYY  pan_owner        get owner of a given panel 
  846. YYYY  pan_sizeof       get # panels in the panel file 
  847. YYYYY pan_status       get status of last pan_open or pan_apply
  848.       
  849.       
  850.       Pointer Management Functions
  851. CPBRD
  852. -----
  853. YYYYY ptr_addto        set pointer control flags 
  854. YYYYY ptr_close        close a pointer object 
  855. YYYYY ptr_erase        erase pending pointer messages 
  856. YYYYY ptr_free         free a pointer object 
  857. YYYYY ptr_getflags     get pointer control flags 
  858. YYYYY ptr_getpri       get priority level of pointer in objectq 
  859. YYYYY ptr_getscale     get current scaling factors 
  860. YYYYY ptr_new          create a new pointer object 
  861. YYYYY ptr_open         open pointer and assign to a window 
  862. YYYY  ptr_owner        get owner of a given pointer 
  863. YYYYY ptr_read         wait for next pointer message 
  864. YYYYY ptr_setflags     replace pointer control flags 
  865. YYYYY ptr_setpri       set priority level of ptr in task's objectq 
  866. YYYYY ptr_setscale     set current scaling factors 
  867. YYYYY ptr_sizeof       get # messages pending 
  868. YYYYY ptr_status       get button status from last message received
  869.  
  870. YYYYY ptr_subfrom      clear pointer control flags 
  871. YYYYY ptr_write        move the pointer to a given position
  872.       
  873.       
  874.       Query Functions
  875. CPBRD
  876. -----
  877. YYYYY qry_atread       TRUE if win_read and win_readn will read
  878. attributes 
  879. YYYYY qry_attrget      current output attribute 
  880. YY Y  qry_col          get current cursor column position 
  881. YYYYY qry_color        get physical attribute for given logical
  882. attribute
  883. YYYYY qry_ctrl         TRUE if processing control codes 
  884. YYYYY qry_cursor       get current cursor position 
  885. YYYY  qry_dosuser      get handle of task currently using DOS 
  886. YYYYY qry_entry        get field table entry 
  887. YYYYY qry_field        get contents of a field 
  888. YYYY  qry_flength      get length of a field 
  889. YYYYY qry_frame        TRUE if the window has a frame 
  890. YYYYY qry_frattr       get current frame attribute 
  891.    Y  qry_ftable       get field table window stream 
  892. YYYYY qry_header       get field table header 
  893. YYYYY qry_hidden       TRUE if the window is hidden 
  894. YYYYY qry_kmouse       TRUE if using a keyboard mouse 
  895. YYYYY qry_leave        TRUE if leaving attributes untouched when
  896. writing to     
  897.                    window
  898. YYYYY qry_logattr      TRUE if using logical attributes 
  899. YYYYY qry_lsize        get size of logical window buffer 
  900. YYYYY qry_origin       get origin of physical relative to logical
  901. window 
  902. YYYYY qry_position     get position of physical window 
  903. YY Y  qry_row          get current cursor row position 
  904. YYYY  qry_scrninfo     get current size & video mode of screen 
  905. YYYYY qry_size         get size of physical window 
  906. YYYYY qry_title        get window's title 
  907. YYYYY qry_type         get type of field
  908.       
  909.       
  910.       Text File Device Driver Functions
  911. CPBRD
  912. -----
  913.  Y    tfd_attach       attach a given window to TFDD 
  914.  Y    tfd_close        close TFDD 
  915.  Y    tfd_lock         lock access to TFDD 
  916.  Y    tfd_open         open TFDD and attach given window 
  917.  Y    tfd_unlock       unlock access to TFDD
  918.       
  919.       
  920.       Timer Management Functions
  921. CPBRD
  922. -----
  923. YYYYY tim_addto        start a timer for a given interval 
  924. YYYYY tim_close        close a timer object 
  925. YYYYY tim_erase        stop a running timer 
  926. YYYYY tim_freefree     a timer object 
  927. YYYYY tim_getpriget    priority level of timer in objectq 
  928. YYYYY tim_len          get time remaining until timer expires 
  929. YYYYY tim_newcreate    a new timer object 
  930. YYYYY tim_openopen     a timer object 
  931. YYYY  tim_owner        get owner of a given timer 
  932. YYYYY tim_read         wait for timer to expire 
  933. YYYYY tim_setpri       set priority level of timer in task's
  934. objectq 
  935. YYYYY tim_sizeofget    time since a timer started running 
  936. YYYYY tim_status       determine if a timer is running 
  937. YYYYY tim_write        start a timer for a given time of day
  938.       
  939.       
  940.       Task Management Functions
  941. CPBRD
  942. -----
  943. YY Y  tsk_dispatchint  software interrupt another task at a "safer"
  944. time 
  945. YYYYY tsk_free         free a task and its window 
  946. YYYYY tsk_geterrorget  error handling level of current task 
  947. YYYY  tsk_me           get handle of current task 
  948. YY Y  tsk_new          create a new task 
  949. YY Y  tsk_pgmint       software interrupt another task 
  950. YYYY  tsk_owner        get owner of a given task 
  951. YYYYY tsk_post         restart a task waiting on its objectq 
  952. YYYYY tsk_seterror     set error handling level of current task 
  953. YYYYY tsk_start        restart a stopped task 
  954. YYYYY tsk_stop         temporarily stop a task
  955.       
  956.       
  957.       Window Management Functions 
  958. CPBRD
  959. -----
  960.    Y  win_achoice      execute a pop-up menu in a window 
  961. YYYYY win_addto        write characters & attributes to a window 
  962. YYYYY win_adopt        adopt a window 
  963. YYYYY win_allow        specify which DV commands are allowed 
  964. YY Y  win_async        define asynchronous notify function 
  965.    Y  win_atbox        draw a box in a window 
  966.    Y  win_atclear      clear rectangular region of window 
  967.    Y  win_atget        input data at specified window position 
  968.    Y  win_atprompt     paint menu prompts & define messages of
  969. window
  970. YYYYY win_atread       set read mode to read either character or
  971. attribute 
  972.    Y  win_atsay        display data at specified window position 
  973. YYYY  win_attach       attach/detach window to parent task window 
  974.    Y  win_atto         draw single or double line box in window 
  975. YYYYY win_attr         set current output attribute 
  976. YYYYY win_blanks       write blanks to a window 
  977. YYYYY win_bottom       make window bottommost in its application
  978.    Y  win_browse       browse & edit records within a window 
  979. YYYY  win_buffer       get address of logical window buffer
  980. YYYYY win_cancel       cancel notification on a given event 
  981.    Y  win_clear        clear a window and home the cursor 
  982.    Y  win_clcolor      convert DESQview physical attribute to
  983. Clipper color     
  984.                    code 
  985.    Y  win_cleargets    release all of window's pending gets 
  986.    Y  win_clscroll     scroll window region up, down or blank out 
  987. YYYYY win_color        change logical attribute mapping 
  988. YYYY  win_connect      attach window to another window 
  989. YYYYY win_ctrl         enable/disable interpretation of control
  990. characters 
  991. YYYYY win_cursor       move window's logical cursor 
  992.    Y  win_dbedit       browse records in a table layout 
  993. YYYYY win_dflt         change default notify window 
  994. YYYYY win_disallow     specify which DV commands are not allowed 
  995. YYYYY win_disperor     display an error message window 
  996.    Y  win_dvattr       convert Clipper color code to DESQview
  997. physical          
  998.                    attribute 
  999. YYYYY win_eof          TRUE if logical cursor is beyond end of
  1000. window 
  1001. YYYYY win_erase        clear a window 
  1002. YYYYY win_frame        enable/disable display of a window's frame 
  1003. YYYYY win_frattr       define window frame attribute 
  1004. YYYYY win_free         remove a window from screen and free its
  1005. handle 
  1006. YYYYY win_hcur         display hardware cursor at logical cursor
  1007. position
  1008. YYYYY win_hide         mark a window as hidden 
  1009. YYYYY win_leave        leave existing attribute when writing to
  1010. window 
  1011. YYYYY win_len          return width of logical window 
  1012. YYYYY win_locate       return which window is visible at given
  1013. screen           
  1014.                    position 
  1015. YYYYY win_logattr      use logical/physical attributes 
  1016. YYYYY win_lsize        set window's logical dimensions 
  1017.    Y  win_mark1/2      display result of an expression in specified
  1018. window 
  1019. YYYYY win_maxsize      set window's max physical dimensions 
  1020. YYYYY win_me           get current task's window handle 
  1021.    Y  win_menuto       execute light-bar menu for defined prompts
  1022. in a window
  1023. YYYYY win_minsize      set window's min physical dimensions 
  1024. YYYYY win_move         move physical window 
  1025. YYYYY win_new          create a new window 
  1026. YYYYY win_notify       enable notification on a given event 
  1027. YYYYY win_nread        read n characters from a window 
  1028. YYYYY win_open         fill a window with a given character 
  1029. YYYYY win_origin       define portion of logical window viewed in
  1030. physical      
  1031.                    window
  1032. YYYYY win_orphan       orphan a window 
  1033. YYYY  win_owner        get owner of a given window 
  1034. YYYYY win_paste        define window as current clipboard window 
  1035. YYYYY win_point        jump mouse to logical cursor position 
  1036. YYYYY win_poswin       position window relative to another window 
  1037. YYYYY win_putc         write a character/attribute pair to a window
  1038.  
  1039. YYYYY win_printf       write formatted data to a window 
  1040. YYYYY win_read         read rest of current line from window 
  1041.    Y  win_readexit     determine whether Up/Down keys exit 
  1042.    Y  win_readgets     enter editing mode using pending gets in a
  1043. window 
  1044. YYYYY win_redraw       redraw a window 
  1045. YYYY  win_reorder      reorder an application's windows 
  1046. YYYYY win_repattr      write an attribute to a window n times 
  1047. YYYYY win_repchar      write a character to a window n times 
  1048. YYYYY win_resize       set physical dimensions of a window 
  1049.    Y  win_restore      display a saved window to a specified window
  1050. area 
  1051.    Y  win_save         save window region to memory variable 
  1052. YYYYY win_scroll       scroll all or part of a window 
  1053.    Y  win_setbell      determine sounding of bell during
  1054. win_readgets 
  1055.    Y  win_setcenter    determine centering of win_atprompt messages
  1056.  
  1057.    Y  win_setcolor     determine color attributes of window 
  1058.    Y  win_setconfirm   determine required win_atget termination
  1059. with Enter      
  1060.                    key 
  1061.    Y  win_setescape    determine whether Esc key terminates
  1062. win_readgets 
  1063.    Y  win_setintensity toggle display intensity of win_atget and
  1064. win_atprompt
  1065.    Y  win_setmessage   determine row and centering of win_atprompt
  1066. messages
  1067.    Y  win_setwrap      determine wrapping in win_menuto 
  1068. YYYYY win_sizeof       get # character positions in the logical
  1069. window 
  1070. YYYYY win_stream       write a stream to a window 
  1071. YYYYY win_subfrom      write attributes to a window 
  1072. YYYYY win_title        change a window's title 
  1073. YYYYY win_top          make window topmost in its application 
  1074. YYYYY win_topsys       make window topmost in the system 
  1075. YYYYY win_unhide       mark a window as not hidden 
  1076.    Y  win_updated      determine if pending gets changed during
  1077. last            
  1078.                    win_readgets 
  1079. YYYYY win_write        write characters to a window
  1080.       
  1081.       
  1082.       
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.               YES! I'm Interested In System Development/Performance
  1089. ┌───┬─────┬─────┬────────────────────────────────────────┬───────
  1090. ┬───────┐ 
  1091. │QTY│5-1/4│3-1/2│ Product                                │ Price │
  1092. Total │ 
  1093. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1094. ┼───────┤ 
  1095. │   │     │     │ DESQview                               │$129.95│$ 
  1096.     │ 
  1097. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1098. ┼───────┤ 
  1099. │   │     │     │ DESQview386 (DESQview & QEMM)          │$219.95│$ 
  1100.     │ 
  1101. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1102. ┼───────┤ 
  1103. │   │     │     │ Quarterdeck Manifest                   │$ 59.95│$ 
  1104.     │ 
  1105. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1106. ┼───────┤ 
  1107. │   │     │     │ QRAM                                   │$ 79.95│$ 
  1108.     │ 
  1109. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1110. ┼───────┤ 
  1111. │   │     │     │ QEMM 50/60                             │$ 99.95│$ 
  1112.     │ 
  1113. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1114. ┼───────┤ 
  1115. │   │     │     │ QEMM 386                               │$ 99.95│$ 
  1116.     │ 
  1117. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1118. ┼───────┤ 
  1119. │   │     │     │ DESQview API Debugger                  │$149.95│$ 
  1120.     │  
  1121. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1122. ┼───────┤ 
  1123. │   │     │     │ DESQview API Panel Design Tool         │$149.95│$ 
  1124.     │ 
  1125. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1126. ┼───────┤ 
  1127. │   │     │     │ DESQview API Reference                 │$ 59.95│$ 
  1128.     │ 
  1129. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1130. ┼───────┤ 
  1131. │   │     │     │ DESQview API Libraries (C,Pascal,      │       │$ 
  1132.     │ 
  1133. │   │     │     │          Basic,Clipper and dBase)      │$199.95│ 
  1134.      │ 
  1135. │   │     │     │                                        │       │ 
  1136.      │ 
  1137. │   │     │     │ Check One:                             │       │ 
  1138.      │ 
  1139. │   │     │     │ C( )  Clipper( ) Pascal( ) dBase( )    │       │ 
  1140.      │ 
  1141. │   │     │     │ Basic( )                               │       │ 
  1142.      │ 
  1143. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1144. ┼───────┤ 
  1145. │   │     │     │ DESQview API Toolkit (API Reference,   │$500.00│$ 
  1146.     │ 
  1147. │   │     │     │            Library,Panel Design Tool,  │       │ 
  1148.      │ 
  1149. │   │     │     │            Debugger, DESQview)         │       │ 
  1150.      │ 
  1151. │   │     │     │                                        │       │ 
  1152.      │ 
  1153. │   │     │     │ Check One:                             │       │ 
  1154.      │ 
  1155. │   │     │     │ C( )  Clipper( ) Pascal( ) dBase( )    │       │ 
  1156.      │ 
  1157. │   │     │     │ Basic( )                               │       │ 
  1158.      │ 
  1159. ├───┼─────┼─────┼────────────────────────────────────────┼───────
  1160. ┼───────┤ 
  1161. │   │     │     │ DESQview by S.R. Davis (book)          │$ 29.95│$ 
  1162.     │ 
  1163. ├───┴─────┴─────┼────────────────────────────────────────┼───────
  1164. ┼───────┤
  1165. │░░░░░░░░░░░░░░░│ Shipping & Handling                    │░░░░░░░│ 
  1166.      │
  1167. │░░░░░░░░░░░░░░░│ USA: $5                                │░░░░░░░│ 
  1168.      │
  1169. │░░░░░░░░░░░░░░░│ Outside USA: $10                       │░░░░░░░│$ 
  1170.     │
  1171. │░░░░░░░░░░░░░░░├────────────────────────────────────────┤░░░░░░░
  1172. ├───────┤
  1173. │░░░░░░░░░░░░░░░│ Sales Tax (CA Only:%6.75)              │░░░░░░░│$ 
  1174.     │
  1175. │░░░░░░░░░░░░░░░├────────────────────────────────────────┼───────
  1176. ┴───────┤
  1177. │░░░░░░░░░░░░░░░│ Amount                                 │$       
  1178.       │
  1179. └───────────────┴────────────────────────────────────────┴───────
  1180. ────────┘
  1181.                                                           
  1182.                                                           
  1183.  
  1184.                                                           
  1185.                                                           
  1186. ┌────────────────────────────────────────────────────────────────
  1187. ────────┐
  1188. │ Payment:  M/C VISA AMEX                                         
  1189.       │
  1190. ├────────────────────────────────────────────────────────────────
  1191. ────────┤
  1192. │ Expiration:                                                     
  1193.       │
  1194. ├────────────────────────────────────────────────────────────────
  1195. ────────┤
  1196. │ Card Number:                                                    
  1197.       │
  1198. ├─────────────────────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬──────────
  1199. ────────┤
  1200. │ Name On Credit Card:│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │           
  1201.       │
  1202. ├─────────────────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──────────
  1203. ────────┤
  1204. │ Shipping Address:                                               
  1205.       │
  1206. │                                                                 
  1207.       │
  1208. │                                                                 
  1209.       │
  1210. ├────────────────────────────────────────────────────────────────
  1211. ────────┤ 
  1212. │ Telephone:                                                      
  1213.       │
  1214. ├────────────────────────────────────────────────────────────────
  1215. ────────┤
  1216. │ Signature:                                                      
  1217.       │
  1218. └────────────────────────────────────────────────────────────────
  1219. ────────┘
  1220.                                                                   
  1221.        
  1222.  
  1223.                             Quaterdeck Office Systems
  1224.                      150 Pico Blvd., Santa Monica, CA 90405
  1225.                                   (213)392-9851
  1226.                                 Fax (213)399-3802
  1227.  
  1228.  
  1229.            
  1230.  
  1231.                 Copyright (C) 1991 by Quarterdeck Office Systems
  1232.                      * * *   E N D   O F   F I L E    * * *
  1233.  
  1234.